package com.hspedu.newData.dmsxl.哈希表;

import org.junit.Test;

import java.util.HashMap;

/**
 * @Author: yh
 * @description: 
 * @CreateTime: 2025-04-22 
 * @Version: 1.0
 */

public class LC242有效的字母异位词 {

    // 数组直接实现
    public boolean isAnagram(String s, String t) {
        int[] sP = new int[26];
        int[] tP = new int[26];

        for (int i = 0; i < s.length(); i++) {
            int x = s.charAt(i) - 'a';
            sP[x]++;
        }

        for (int i = 0; i < t.length(); i++) {
            int x = t.charAt(i) - 'a';
            tP[x]++;
        }

        for (int i = 0; i < 26; i++) {
            if (sP[i] != tP[i]){
                return false;
            }
        }
        return true;
    }

    // hash函数
    public boolean isAnagram1(String s, String t) {
        HashMap<Character,Integer> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            map.put(s.charAt(i),map.getOrDefault(s.charAt(i),0) + 1);
        }

        for (int i = 0; i < t.length(); i++) {
            if (!map.containsKey(t.charAt(i))){
                return false;
            }
            map.put(t.charAt(i),map.get(t.charAt(i)) - 1);
            if (map.get(t.charAt(i)) < 0){
                return false;
            }else if (map.get(t.charAt(i)) == 0){
                map.remove(t.charAt(i));
            }
        }
        return map.size() == 0;
    }

    @Test
    public void test() {
        // 测试代码

        boolean anagram = isAnagram("anagram", "nagaram");
        boolean anagram1 = isAnagram("rat", "car");
        System.out.println("=======");
    }

}
